package com.tanhua.dubbo.api;

import com.tanhua.dubbo.api.mongo.FriendApi;
import com.tanhua.dubbo.api.mongo.UserLikeApi;
import com.tanhua.model.mongo.UserLike;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

/**
 * 左滑右滑服务接口实现类
 */
@DubboService
@Slf4j
public class UserLikeApiImpl implements UserLikeApi {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Autowired
    private FriendApi friendApi;

    /**
     * 保存喜欢或不喜欢数据（左滑右滑）
     *
     * @param userLike
     * @return
     */
    @Override
    public boolean add(UserLike userLike) {
        log.debug("***********userLike*************"+userLike);
        Long loginUserId = userLike.getUserId();//当前登录用户id
        Long recommmendUserId = userLike.getLikeUserId();//推荐用户id
        Boolean isLike = userLike.getIsLike();//true:喜欢 false:不喜欢
        //1 根据当前登录用户id和喜欢的用户id查询user_like表记录是否存在
        Query query = new Query();
        query.addCriteria(Criteria.where("userId").is(loginUserId).and("likeUserId").is(recommmendUserId));
        boolean isHasLike = mongoTemplate.exists(query, UserLike.class);
        log.debug("***********isHasLike*************"+isHasLike);
        //2 记录存在 更新记录user_like
        if(isHasLike){
            Update update = new Update();
            update.set("isLike",isLike);//是否喜欢值
            update.set("updated",System.currentTimeMillis());//修改时间
            mongoTemplate.updateFirst(query,update,UserLike.class);
        }else {
            //3 记录不存在 直接保存user_like
            long nowTime = System.currentTimeMillis();
            userLike.setCreated(nowTime);//创建时间
            userLike.setUpdated(nowTime);//修改时间
            mongoTemplate.insert(userLike);
        }
        //4 如果是喜欢，查询对方是否喜欢登录用户user_like
        if(isLike){
            Query query2 = new Query();
            query2.addCriteria(
                    Criteria.where("userId").is(recommmendUserId)
                            .and("likeUserId").is(loginUserId)
                    .and("isLike").is(true)
            );
            boolean isHasLike2 = mongoTemplate.exists(query2, UserLike.class);
            log.debug("***********isHasLike2*************"+isHasLike2);
            //5 如果对方喜欢当前登录用户id,往friend表插入2条数据
            if(isHasLike2){
                friendApi.add(recommmendUserId,loginUserId);
                log.debug("***********已添加好友*************");
                return true;
            }
        }
        log.debug("***********未添加好友*************");
        return false;
    }
}
